/**
 * @file        LedCtrl.h
 * @version     V1.0
 * @date        2022-06-21
 * @brief       LED控制模块头文件
 *              该文件定义了LED控制相关的结构体、宏定义、函数声明和全局变量
 */

#ifndef __LED_CTRL_H
#define __LED_CTRL_H

#include "main.h"

/**
 * @brief LED状态控制函数
 * @note  用于控制LED的开关和亮度状态
 */
void LEDChange(void);

/**
 * @brief 亮度渐变控制函数
 * @note  实现LED亮度平滑过渡到目标比例
 */
void fadeToTargetRatio(void);

/**
 * @brief LED参数结构体
 * @note  存储LED控制相关参数
 */
typedef struct {
    float LEDRATIO;      /*!< LED亮度比例因子，用于整体调节亮度 */
}LEDParameter;

/**
 * @brief 当前亮度比例
 * @note  表示LED当前的亮度百分比（0.0-1.0）
 */
extern float currentRatio;

/**
 * @brief LED参数设置结构体变量
 * @note  存储LED控制的各项参数配置
 */
extern LEDParameter LEDParameterSET;

/**
 * @brief 主灯4000K开启宏
 * @note  设置主灯4000K色温的PWM输出，根据当前亮度等级和比例计算
 */
#define MAIN_4000_on  __HAL_TIM_SetCompare(&Main_4k_tim, Main_4k_CHANNEL, MAIN_4000_LED_levels[DeviceStatus.currentLevel]*currentRatio* LEDParameterSET.LEDRATIO)

/**
 * @brief 主灯4000K关闭宏
 * @note  关闭主灯4000K色温的PWM输出
 */
#define MAIN_4000_off __HAL_TIM_SetCompare(&Main_4k_tim, Main_4k_CHANNEL, 0)

/**
 * @brief 主灯5000K开启宏
 * @note  设置主灯5000K色温的PWM输出，根据当前亮度等级和比例计算
 */
#define MAIN_5000_on  __HAL_TIM_SetCompare(&Main_5k_tim, Main_5k_CHANNEL, MAIN_5000_LED_levels[DeviceStatus.currentLevel]*currentRatio* LEDParameterSET.LEDRATIO)

/**
 * @brief 主灯5000K关闭宏
 * @note  关闭主灯5000K色温的PWM输出
 */
#define MAIN_5000_off __HAL_TIM_SetCompare(&Main_5k_tim, Main_5k_CHANNEL, 0)

/**
 * @brief 工作电源开启宏
 * @note  开启LED工作电源的GPIO输出
 */
#define WORKPOWER_ON  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET)

/**
 * @brief 工作电源关闭宏
 * @note  关闭LED工作电源的GPIO输出
 */
#define WORKPOWER_OFF HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET)

/**
 * @brief LED亮度等级数量
 * @note  定义系统支持的LED亮度等级总数
 */
#define NUM_LED_LEVELS 4

/**
 * @brief 主灯4000K各亮度等级PWM值数组
 * @note  存储4000K色温下不同亮度等级对应的PWM输出值
 */
extern int MAIN_4000_LED_levels[NUM_LED_LEVELS];

/**
 * @brief 主灯5000K各亮度等级PWM值数组
 * @note  存储5000K色温下不同亮度等级对应的PWM输出值
 */
extern int MAIN_5000_LED_levels[NUM_LED_LEVELS];

#endif